package plugins.order;

import kd.bos.cache.CacheFactory;
import kd.bos.cache.DistributeSessionlessCache;
import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.dataentity.serialization.SerializationUtils;
import kd.bos.form.events.SetFilterEvent;
import kd.bos.list.plugin.AbstractListPlugin;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.sdk.plugin.Plugin;
import kd.bos.servicehelper.user.UserServiceHelper;


import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;

/**
 * 标准单据列表插件
 */
public class CreatMenu extends AbstractListPlugin implements Plugin {


    Object[] names = {}; // 用于存储从缓存中获取的值

    // 创建缓存实例
    DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
    boolean hasMerchant = false; // 新增标志位，标记用户是否有商户记录

    public void afterCreateNewData(EventObject e) {
        // 从缓存读取数据
        String sourceData = cache.get("selectedmerchantnames");
        cache.remove("selectedmerchantnames"); // 清除缓存中的值

        // 反序列化为Object数组
        if (sourceData != null) {
            List<?> dataList = SerializationUtils.fromJsonStringToList(sourceData, Object.class);  // 42行
            names = dataList.toArray(new Object[0]);

            hasMerchant = true; // 标记为有商户记录
        } else {
            // names = new Object[0]; // 如果缓存中没有数据，初始化为空数组


            // 当缓存为空时，根据当前用户名查询匹配记录
            String currentUsername = RequestContext.get().getUserName();
            QFilter filter = new QFilter("dcb4_manager_name", QCP.equals, currentUsername);

            // 查询基础资料dcb4_merchant
            DynamicObject[] merchantList = BusinessDataServiceHelper.load(
                    "dcb4_merchantdata",
                    "name", // 只查询name字段
                    new QFilter[]{filter}
            );

            // 提取name字段值
            List<String> nameList = new ArrayList<>();
            for (DynamicObject merchant : merchantList) {
                nameList.add(merchant.getString("name"));
            }
            names = nameList.toArray();

            // 如果当前用户名是"陈旭"（管理员），则显示所有数据
            if (currentUsername.equals("陈旭") || currentUsername.equals("吕璐君")) {
                names = new Object[0];
                hasMerchant = true; // 标记为有商户记录
            }

            // 如果当前用户名下没有匹配记录，则不显示数据
            if (nameList.isEmpty()) {
                this.getView().showMessage("当前用户没有匹配的商户记录，请联系管理员添加商户信息。");
            } else {
                hasMerchant = true; // 标记为有商户记录
            }

        }
    }


    @Override
    public void setFilter(SetFilterEvent e) {
        super.setFilter(e);


        // this.getView().showTipNotification("AAA");

        if (hasMerchant) {
            if (names != null && names.length > 0) {

                // this.getView().showTipNotification("当前用户有商户记录，正在过滤数据...");

                QFilter inFilter = new QFilter("dcb4_merchant.name", QCP.in, names);
                e.addCustomQFilter(inFilter);
            }
        } else {
            // 没有商户记录：添加不可能满足的条件（不显示任何数据）
            QFilter impossibleFilter = new QFilter("1", QCP.equals, 2);
            e.addCustomQFilter(impossibleFilter);
        }
    }
}



